package com.patterns.singleton;

/**
 * 单例模式——枚举方式
 * @author fwj
 * @date 2020/12/8 14:47
 **/
public class EnumSingleton {
    /**
     * 创建枚举默认就是线程安全的，所以不需要担心double checked locking，而且还能防止反序列化导致重新创建新的对象。
     * 其他几种可以通过反射的方式instance
     * 保证只有一个实例（即使使用反射机制也无法多次实例化一个枚举量）。
     *
     */

    enum Single {
        SINGLE;

        private Single() {
        }

        public void print() {
            System.out.println("hello world");
        }
    }

    public static void main(String[] args) {
        Single single = Single.SINGLE;
        single.print();
    }
}
